Advanced Graphics Processing Units (“GPUs”) sometimes implement techniques for multitasking. In general, multitasking refers to a technique by which multiple contexts can be serviced using a common processing resource. Typically, multitasking accomplishes this goal by scheduling which context is to be serviced during a particular time interval, while another context waits its turn. In the case of a GPU, each context can be referred to as a graphics processing channel, and multiple graphics processing channels can correspond to distinct threads of execution of the same application program or multiple application programs.
When servicing a particular graphics processing channel, a GPU typically accesses a memory address space assigned to that graphics processing channel. For example, a memory address space can store an instance block, which is a data structure similar to a process control block and represents an execution state of a particular graphics processing channel. In accordance with a conventional multitasking implementation, each graphics processing channel is assigned a respective memory address space within a predetermined memory, such as a frame buffer that is closely associated with a GPU. While use of the frame buffer allows fast access to its contents, the relatively small size of the frame buffer can limit the number of memory address spaces that can be assigned, which, in turn, can limit the number of graphics processing channels that can be defined for the GPU. Unfortunately, application programs utilizing the GPU can sometimes require more than this limited number of graphics processing channels.
It is against this background that a need arose to develop the apparatus and method described herein.